/*
    工具类的定义
*/

#pragma once
#include <sstream>
#include <random>
#include <google/protobuf/map.h>

class UUIDGenerator
{
public:
    // 生成一个UUID(通用唯一标识符)
    // 由长度为len个16进制数组成的字符串
    static std::string GenerateHex(const unsigned int len)
    {
        std::stringstream ss;
        for(int i = 0; i < len; i++)
        {
            const unsigned int rc = RandomChar(); // 产生一个随机数
            std::stringstream hexStream; // 创建临时字符串流用于格式化十六进制
            hexStream << std::hex << rc;
            std::string hexStr = hexStream.str();
            ss << (hexStr.size() < 2 ? '0' + hexStr : hexStr); // 如果16进制数长度小于2，则前面补0
        }
        return ss.str();
    }

private:
    // 生成一个数值范围在[0, 255]的随机数
    static unsigned int RandomChar()
    {
        // 硬件随机数生成器，用于产生一个随机数种子
        std::random_device rd;

        // 定义一个随机数生成器，mt19937是一种高质量的伪随机数生成器
        std::mt19937 gen(rd());

        // 定义了一个均匀整数分布对象dis
        // 确保生成的随机数在这个范围内均匀分布
        std::uniform_int_distribution<> dis(0, 255);
        return dis(gen);
    }
};